﻿/*
 *  ============================================================================
 *  Name:           Gestão de parques de estacionamento
 *  Author:         João Faria
 *  Email:          a8836@alunos.ipca.pt
 *                  jfaria.gmr@gmail.com
 *  Version:        0
 *  Date:           2013-04-10
 *  Copyright:       
 *  Description:    IPCA - Programação II
 *                  Projecto final
 *  ============================================================================
 */
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using GesParking.BusinessLayer;
using GesParking.BusinessObjects;
using GesParking.Exceptions;

namespace GesParking
{
    /// <summary>
    /// Classe que gere os parques
    /// </summary>
    class ParksPL
    {
        ParksBL parques = new ParksBL(); ///Esta iniciação de parques deveria ser feita no main do form que faz a gestão de parques

        /// <summary>
        /// Lista os parques activos
        /// </summary>
        /// <returns>Lista de parques</returns>
        public List<ParkBo> List()
        {
            return parques.ListBL();
        }

        /// <summary>
        /// Adiciona um parque
        /// </summary>
        /// <param name="id">Id do novo parque</param>
        /// <param name="n">Nome do parque</param>
        /// <param name="m">Capacidade máxima</param>
        public void Add(Guid id, string n, int m)
        {
            try
            {
                parques.AddBL(new ParkBo(id, n, m));
            }
            catch (DuplicateParkException)
            {

                MessageBox.Show("Já existe um parque com esse nome!");
            }
        }

        /// <summary>
        /// Desatica um parque
        /// </summary>
        /// <param name="id">Id do parque a desativar</param>
        public void Disable(Guid id)
        {
            try
            {
                parques.DisableBL(id);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Actualiza o nome do parque
        /// </summary>
        /// <param name="n">Novo nome</param>
        /// <param name="id">Id do parque</param>
        public void UpdateName(string n, Guid id)
        {
            try
            {
                parques.UpdateParkNameBL(id, n);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Actualiza capacidade do parque
        /// </summary>
        /// <param name="c">Capacidade do parque</param>
        /// <param name="id">Id do parque</param>
        public void UpdateMaxLoad(int c, Guid id)
        {
            try
            {
                parques.UpdateParkMaxLoadBL(id, c);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        /// <summary>
        /// Grava os dados
        /// </summary>
        public void Save()
        {
            parques.Save();
        }

        /// <summary>
        /// Lê os dados
        /// </summary>
        public void Read()
        {
            parques.Read();
        }
    }
}
